package com.chj.chuji.tijie13;

import java.util.ArrayList;
import java.util.HashMap;

//https://www.nowcoder.com/questionTerminal/fafbd351003a499f9a80c3f641295f2a
public class LengthOfLongestSubstring {

	public static int lengthOfLongestSubstring(ArrayList<Integer> s) {
		if (s.size() < 1) {
			return 0;
		}
//		    int Hashmap[10]; // map用来记录当前出现的数字前一次出现的索引
		HashMap<Integer, Integer> hashMap = new HashMap<Integer, Integer>();
		for (int i = 0; i < 10; i++) {
			hashMap.put(i, -1);
		}
		int start = 0; // 表示当前最长的无重复字符串的起始位置
		int res = 1;
//		Hashmap[s[0]] = 0;
		hashMap.put(s.get(0), 0);
		for (int i = 1; i < s.size(); i++) {
			int indx = hashMap.get(s.get(i)); // 查看s[i]在Hashmap中的值
			if (indx >= start) {
				// 如果indx>start说明当前的字符s[i]已经在当前的最长无重复字符串中出现过了
				int cur = i - start;
				res = Math.max(res, cur);
				// res = Math.max(res, (i - start));
				start = indx + 1; // 将最长无重复字符串的起始位置调成indx的下一位
			}
			// 更新map
//			Hashmap[s[i]] = i;
			hashMap.put(s.get(i), i);
		}
		// 遍历完了以后再更新一次res
		int cur = s.size() - start;
		res = Math.max(res, cur);
		return res;
	}

	public static void main(String[] args) {
		ArrayList<Integer> arr1 = new ArrayList<Integer>();

		int[] ard1 = new int[] { 2, 3, 4, 5 };
		for (int i = 0; i < ard1.length; i++) {
			arr1.add(ard1[i]);
		}
		System.out.println(lengthOfLongestSubstring(arr1));

		ArrayList<Integer> arr2 = new ArrayList<Integer>();

		int[] ard2 = new int[] { 2, 2, 3, 4, 3 };
		for (int i = 0; i < ard2.length; i++) {
			arr2.add(ard2[i]);
		}
		System.out.println(lengthOfLongestSubstring(arr2));
	}
}

//#include<iostream>
//#include<string>
//#include<vector>
//#include<algorithm>
//using namespace std;
//
//int lengthOfLongestSubstring(vector<int>& s) {
//    if(s.size()<1){
//        return 0;
//    }
//    int Hashmap[10]; // map用来记录当前出现的数字前一次出现的索引
//    for(int i=0;i<10;i++){
//        Hashmap[i] = -1;
//    }
//    int start = 0; // 表示当前最长的无重复字符串的起始位置
//    int res = 1;
//    Hashmap[s[0]] = 0;
//    for(int i=1;i<s.size();i++){
//        int indx = Hashmap[s[i]]; // 查看s[i]在Hashmap中的值
//        if(indx>=start){
//            // 如果indx>start说明当前的字符s[i]已经在当前的最长无重复字符串中出现过了
//            res = max(res,(i-start));
//            start = indx+1; // 将最长无重复字符串的起始位置调成indx的下一位
//        }
//        // 更新map
//        Hashmap[s[i]] = i;
//    }
//    // 遍历完了以后再更新一次res
//    int cur = s.size()-start;
//    res = max(res,cur);
//    return res;
//}
//
//
//
//
//int main(){
//    int n;
//    cin>>n;
//    vector<int> arr(n);
//    for(int i=0;i<n;i++){
//        cin>>arr[i];
//    }
//    cout<<lengthOfLongestSubstring(arr);
//}
